﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE;
using Insifo.BE.Gen;
using Insifo.BE.Seg;
using Insifo.DL.Seg;
using Insifo.DL.Gen;
using Insifo.BL.Gen;

namespace Insifo.BL.Seg
{
    public class BLUsuario
    {
        DLUsuario _dl = new DLUsuario();

        /// <summary>
        /// Método obtiene las Personas 
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEUsuario pbe)
        {
            return _dl.Listar(pbe);
        }

        /// <summary>
        /// Método 
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public BEUsuario Obtener(BEUsuario pbe)
        {
            return _dl.Obtener(pbe);
        }

        /// <summary>
        /// Método extrae Companias por Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarCompaniasPorUsuario(string pstrUsuario)
        {
            return _dl.ListarCompaniasPorUsuario(pstrUsuario);
        }

        

        /// <summary>
        /// Método que Valida el Usuario
        /// </summary>
        /// <returns>Valida el Usuario</returns>
        public BEEntidadParam ValidarUsuario(string pstrUsuario, string strClaveEncriptada, int pintNumeroIntentos)
        {
            string strMensaje = string.Empty;
            string strIdioma = AppSettings.LenguajeDesarrollo;

            BEEntidadParam bepar = new BEEntidadParam();
            BEUsuario beu = _dl.ValidarUsuario(pstrUsuario, strClaveEncriptada, pintNumeroIntentos);
            
            bepar.Id = -1;
            bepar.Error = beu.Error;
            bepar.Mensaje = strMensaje;
            //}
            return bepar;
        }


        /// <summary>
        /// Método que Valida el Usuario si existe
        /// </summary>
        /// <returns>Valida el Usuario</returns>
        public BEUsuario ValidarUsuario(int pintIdCompania, int pintIdAplicacion, string psrtCodigoUsuario)
        {
            return _dl.ValidarUsuario(pintIdCompania, pintIdAplicacion, psrtCodigoUsuario);
        }


        /// <summary>
        /// Método que Valida el Usuario si existe
        /// </summary>
        /// <returns>Valida el Usuario</returns>
        public BEEntidadParam ValidarUsuarioExiste(string pstrMensaje)
        {
            BEEntidadParam be = new BEEntidadParam();
            BEUsuario beUsu = new BEUsuario();
            Encripta encry = new Encripta();
            string strCadenaDesc = encry.DesencriptarCadena(pstrMensaje);
            string strDominio = string.Empty;

            string[] strCadenas = strCadenaDesc.Split('|');
            if (strCadenas.Length >= 4)
            {
                string strLlave = strCadenas[0];
                string strIdCompania = strCadenas[1];
                string strCodigoCompania = strCadenas[2];
                string strIdAplicacion = strCadenas[3];
                string strCodigoAplicacion = strCadenas[4];
                string strUsuario = strCadenas[5].ToUpper();

                beUsu = _dl.ValidarUsuario(int.Parse(strIdCompania), int.Parse(strIdAplicacion), strUsuario);

                List<BEEntidadString> lst = new List<BEEntidadString>();

                lst.Add(new BEEntidadString() { Id = strLlave });
                lst.Add(new BEEntidadString() { Id = strIdCompania });
                lst.Add(new BEEntidadString() { Id = strCodigoCompania });
                lst.Add(new BEEntidadString() { Id = strIdAplicacion });
                lst.Add(new BEEntidadString() { Id = strCodigoAplicacion });
                lst.Add(new BEEntidadString() { Id = strUsuario });
                lst.Add(new BEEntidadString() { Id = beUsu.IdPersona.ToString() });

                if (strCadenas.Length >= 6)
                {
                    strDominio = strCadenas[6];
                    lst.Add(new BEEntidadString { Id = strDominio });
                }

                lst.Add(new BEEntidadString() { Id = beUsu.Administrador.ToString() });

                be.ListaCadenas = lst;

            }
            else
            {
                be.Ref = -1;
                be.Mensaje = "Cadena Incorrecta";
            }
            return be;
        }


        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEUsuario Insertar(BEUsuario pbe)
        {
            return _dl.Insertar(pbe);
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEUsuario Actualizar(BEUsuario pbe)
        {
            return _dl.Actualizar(pbe);
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEUsuario Eliminar(BEUsuario pbe)
        {
            return _dl.Eliminar(pbe);
        }

        /// <summary>
        /// Método obtiene los Perfiles con la informacion de usuarios asignados
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorPerfilAsignacion(BEUsuario pbe)
        {
            return _dl.ListarPorPefilAsignacion(pbe);
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEUsuario ReiniciarClave(BEUsuario pbe)
        {
            return _dl.ReiniciarClave(pbe);
        }

    }


}
